package com.mabaijing.io;

import java.io.File;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;

public class Domo3 {
    public static void main(String[] args)throws Exception {
//        File file1 = new File("D:\\code_Java\\rocket_class_io\\src\\hello.txt");
//        System.out.println(file1.exists());
//        System.out.println(file1.isDirectory());
//        System.out.println(file1.isFile());

     //   File file1 = new File("D:\\code_Java\\rocket_class_io\\src");
//        String absolutePath = file1.getAbsolutePath();//保留一模一样的输入路径
//        String canonicalPath = file1.getCanonicalPath();//保留有意义，最简洁的路径
//        System.out.println(absolutePath);
//        System.out.println(canonicalPath);

//        System.out.println(file1.getCanonicalFile().getParent());

//        File[] files = file1.listFiles();
//       for(File i : files){
//           System.out.println(i);
//       }
       // System.out.println(Arrays.toString(files));

        //traversalDepthFirst(file1);
        //traversalBroadFirst(file1);

        File file2 = new File("D:\\code_Java\\rocket_class_io\\src\\a\\b\\c\\hello.txt");
        System.out.println(file2.mkdirs());
    }

    // 1. 深度优先的遍历
    private static void traversalDepthFirst(File dir) throws Exception {
        // 1. 找到这个目录下的所有孩子
        File[] files = dir.listFiles();
        if (files == null) {
            return;
        }

        // 2. 针对每个孩子，判断是目录还是文件
        for (File file : files) {
            if (file.isDirectory()) {
                // 如果确定是个目录，则继续递归去遍历处理
                System.out.println("[D] " + file.getCanonicalPath());
                traversalDepthFirst(file);
            } else {
                System.out.println("[F] " + file.getCanonicalPath());
            }
        }
    }

    // 2. 广度优先的遍历
    private static void traversalBroadFirst(File dir) throws Exception {
        // 使用队列进行层序优先的遍历
        Queue<File> queue = new LinkedList<>();
        queue.offer(dir);

        while (!queue.isEmpty()) {
            File poll = queue.poll();
            if (poll.isDirectory()) {
                System.out.println("[D] " + poll.getCanonicalPath());
            } else {
                System.out.println("[F] " + poll.getCanonicalPath());
            }

            if (poll.isDirectory()) {
                File[] files = poll.listFiles();//取出当前目录下的所有孩子添加到队列中
                if (files == null) {
                    continue;
                }

                for (File file : files) {
                    queue.offer(file);
                }
            }
        }
    }

}
